package open.template.work.gateway.filter;

import com.alibaba.fastjson.JSON;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import open.template.work.commons.exception.BaseTemplateException;
import open.template.work.commons.exception.ExceptionCodeEnum;
import org.springframework.stereotype.Component;

@Component
public class ExceptionFilter extends ZuulFilter {
    @Override
    public String filterType() {
        // 在进行Zuul过滤的时候可以设置其过滤执行的位置，那么此时有如下几种类型：
        // 1、pre：在请求发出之前执行过滤，如果要进行访问，肯定在请求前设置头信息
        // 2、route：在进行路由请求的时候被调用；
        // 3、post：在路由之后发送请求信息的时候被调用；
        // 4、error：出现错误之后进行调用
        return "error";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext currentContext = RequestContext.getCurrentContext();
        currentContext.setSendZuulResponse(true);
        currentContext.setResponseStatusCode(200);
        currentContext.setResponseBody(JSON.toJSONString(new BaseTemplateException(ExceptionCodeEnum.S99999)));
        currentContext.getResponse().setContentType("text/html;charset=UTF-8");
        return null;
    }
}
